package pl.icn.hurtownia.encje;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Kategoria
 */
@Entity
@Table(name="KATEGORIE")
public class Kategoria {
	
	/** Identyfikator techniczny encji */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="ID", nullable=false, unique=true)
	private Long id;
	
	/** Kod */
	@Column(name="KOD", nullable=false, unique=true, length=10)
	private String kod;
	
	/** Nazwa */
	@Column(name="NAZWA", nullable=false, length=100)
	private String nazwa;
	
	/** Produkty */
	@OneToMany(fetch=FetchType.LAZY, mappedBy="kategoria")
	private Set<Produkt> produkty;
	
	/** Nadkategoria */
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="KATEGORIA_ID")
	private Kategoria nadkategoria;
	
	/** Podkategorie */
	@OneToMany(fetch=FetchType.LAZY, mappedBy="nadkategoria")
	private Set<Kategoria> podkategorie;
	
	/**
	 * Tworzy instancję klasy {@code Kategoria}
	 */
	public Kategoria() {
		produkty = new HashSet<Produkt>();
		podkategorie = new HashSet<Kategoria>();
	}

	/**
	 * Tworzy instancję klasy {@code Kategoria}
	 */
	public Kategoria(String kod, String nazwa, Set<Produkt> produkty, Kategoria nadkategoria, Set<Kategoria> podkategorie) {
		this.kod = kod;
		this.nazwa = nazwa;
		this.produkty = produkty;
		this.nadkategoria = nadkategoria;
		this.podkategorie = podkategorie;
	}

	public String getKod() {
		return kod;
	}

	public void setKod(String kod) {
		this.kod = kod;
	}

	public String getNazwa() {
		return nazwa;
	}

	public void setNazwa(String nazwa) {
		this.nazwa = nazwa;
	}

	public Set<Produkt> getProdukty() {
		return produkty;
	}

	public void setProdukty(Set<Produkt> produkty) {
		this.produkty = produkty;
	}
	
	public Kategoria getNadkategoria() {
		return nadkategoria;
	}

	public void setNadkategoria(Kategoria nadkategoria) {
		this.nadkategoria = nadkategoria;
	}

	public Set<Kategoria> getPodkategorie() {
		return podkategorie;
	}

	public void setPodkategorie(Set<Kategoria> podkategorie) {
		this.podkategorie = podkategorie;
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

}
